package com.kx.my04;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

import java.util.Date;

/**
 * @Aspect：是aspectj框架中的注解。 作用：表示当前类是切面类。
 * 切面类：是用来给业务方法增加功能的类，在这个类中有切面的功能代码
 */
@Aspect
public class MyAspect {
    /**
     * 环绕通知方法的定义要求：
     * 1、公共方法public
     * 2、没有返回值
     * 3、方法名称自定义
     * 4、有一个参数Exception，如果还有则是JoinPoint
     */
    /**
     * @AfterThrowing:异常通知
     *      属性：
     *      1、value切入点表达式
     *      2、throwing 自定义变量，表目标方法抛出的异常对象。
     *         变量名必须和方法的参数名一致
     *      特点：
     *      1、在目标方法抛出异常时执行的
     *      2、可以做异常的监控程序，监控目标方法执行时是否有异常
     *      如果有异常，可以发送邮件，短信进行通知
     *
     *      执行：
     *      try{
     *          SomeServiceImpl.doSecond(..)
     *      }catch(Exception e){
     *          myAfterThrowing(e)
     *      }
     */
    @AfterThrowing(value = "execution(* *..SomeServiceImpl.doSecond(..))",throwing = "e")
    public void myAfterThrowing(Exception e){
        System.out.println("异常通知，发生异常时，执行："+e.getMessage());
        //发送邮件，短信，通知开发人员
    }
}
